package associados.bd;

import associados.classes.Associado;
import conexao.ConexaoSingleton;
import conexao.DAOException;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;


/**
 *
 * @author giselia
 */
public class AssociadoDAO implements IAssociadoDAO {

    private EntityManager manager;

    public AssociadoDAO() throws DAOException {
        try {
            manager = ConexaoSingleton.getConexao();
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new DAOException("Sem conexão com a Base de Dados", ex);
        }


    }
//metodo que mostra os associados e retorna uma lista de associados

    public List<Associado> getAssociados() throws DAOException {
        try {

            Query q = manager.createQuery("select a from Associado a order by nome");
            List<Associado> lista= q.getResultList();
            return lista;

        } catch (Exception ex) {
           ex.printStackTrace();
            throw  new DAOException("Erro na consulta na base de dados",ex);
        }
    }

    public void salvar(Associado a) throws DAOException {

        try {
            //abrindo uma transação
            manager.getTransaction().begin();
            manager.persist(a);
            //fechando uma transação
            manager.getTransaction().commit();


        } catch (Exception ex) {
            if (manager.getTransaction().isActive()) {
                //em caso de erro o rollback desfaz o que ficou pela metade
                manager.getTransaction().rollback();
            }
            ex.printStackTrace();
            throw new DAOException("Sem conexao com a base", ex);
        }
    }

    public void desconecta() {
        try {
            manager.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
//metodo que pesquisa por nome

    public List<Associado> getNomeAssocaiado(String nome) throws DAOException {
        try {
            Query q = manager.createNamedQuery("associadoPorNome");
            //% coringa para consulta no sql
            q.setParameter("nomeAssociado", "%" + nome + "%");
            return q.getResultList();
        } catch (Exception e) {
            throw new DAOException("Erro na consulta a base de dados de Associado", e);
        }
    }

    public void excluirAssociado(Associado associado) throws DAOException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void setAssociado(Associado associado) throws DAOException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public List<Associado> getDataNascimento(Date dataInicial, Date dataFinal) throws DAOException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public Associado getNumeroBeneficio(String nbeneficio) throws DAOException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public Associado getCPF(String cpf) throws DAOException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public Associado getBairro(String bairro) throws DAOException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    

}
